import tkinter as tk
from tkinter import ttk
# 绑定窗口关闭事件
def on_closing(root):
    root.destroy()
    print("操作错误，终止程序！！！")
    exit()
# 定义一个函数，用于处理按钮点击事件
def on_button_click(selected_option, root):
    # 获取选择的值
    user_selected = selected_option.get()
    print(f"选择的选项: {user_selected}")
    # 销毁窗口
    root.quit()  # 使用 quit() 而不是 destroy()，以便在 mainloop 结束后获取选中的值
# 定义一个函数，用于gui选择选项
def select_option(options: list,gui:bool):
    if gui:
        # 创建主窗口
        root = tk.Tk()
        root.title("请选择：")
        # 设置窗口大小
        root.geometry("300x200")
        # 设置窗口位置
        root.eval('tk::PlaceWindow %s center' % root.winfo_pathname(root.winfo_id()))
        # 当前窗口关闭时执行 on_closing 事件
        root.protocol("WM_DELETE_WINDOW", lambda: on_closing(root))
        # 创建一个变量来存储选中的值
        selected_option = tk.StringVar()
        # 初始化选中的值为第一个选项
        selected_option.set(options[0])
        # 创建下拉框
        dropdown = ttk.Combobox(root, textvariable=selected_option, values=options, width=30)
        # 显示下拉框
        dropdown.pack(pady=40)
        # 创建一个标签，用于显示选择的结果
        label = tk.Label(root, text="请选择一个选项：")
        label.pack(pady=10)
        # 创建一个按钮，点击后关闭窗口
        button = tk.Button(root, text="确定", command=lambda: on_button_click(selected_option, root))
        button.pack(pady=10)
        # 绑定回车键关闭窗口
        root.bind("<Return>", lambda event: on_button_click(selected_option, root))
        # 进入主循环
        root.mainloop()
        # 获取选择的值
        user_selected = selected_option.get()
        # 销毁窗口
        root.destroy()
        # 返回选择的值
        return user_selected
    else:
        for index,option in enumerate(options):print(f"【{index+1}】: {option}")
        select_index = int(input("请输入序号选择："))
        return options[select_index-1]
# 定义一个函数，用于gui获取用户输入的值
def get_input(prompt:str,gui:bool):
    if gui:
        # 创建一个顶级窗口
        root = tk.Tk()
        # 设置窗口标题
        root.title("输入框")
        # 设置窗口大小
        window_width = 400
        window_height = 200
        # 获取屏幕宽度和高度
        screen_width = root.winfo_screenwidth()
        screen_height = root.winfo_screenheight()
        # 计算窗口在屏幕上的中心位置
        x_position = (screen_width - window_width) // 2
        y_position = (screen_height - window_height) // 2
        # 设置窗口大小和位置
        root.geometry(f"{window_width}x{window_height}+{x_position}+{y_position}")
        # 当前窗口关闭时执行 on_closing 事件
        root.protocol("WM_DELETE_WINDOW", lambda: on_closing(root))
        # 创建一个标签，用于显示提示信息
        label = tk.Label(root, text=prompt)
        # 显示标签
        label.pack(pady=20)
        # 创建一个输入框
        entry_var = tk.StringVar()
        entry = tk.Entry(root, textvariable=entry_var,width=50)
        # 显示输入框
        entry.pack(pady=10)
        entry.focus()
        # 创建一个按钮，点击后关闭窗口
        button = tk.Button(root, text="确定", command=root.quit)
        button.pack(pady=10)
        # 绑定回车键关闭窗口
        entry.bind("<Return>", lambda event: root.quit())
        # 进入主循环
        root.mainloop()
        # 获取输入框的值
        user_input = entry_var.get()
        # 销毁窗口
        root.destroy()
        return user_input
    else:
        return input(prompt)

if __name__ == '__main__':
    # print(select_option(["1","2","3"]))
    print(get_input(""))